/**
 * Values (获取值) 实现
 * 
 * 获取对象的所有可枚举属性值，类似于Lodash的values方法。
 * 这是JavaScript开发中常用的工具函数，用于获取对象的值。
 * 
 * 时间复杂度：O(n)
 * 空间复杂度：O(n)
 */

class Values {
  /**
   * 获取对象的所有可枚举属性值
   * @param {Object} object - 目标对象
   * @returns {Array} - 属性值数组
   */
  static values(object) {
    // TODO: 实现获取值
    // 1. 验证输入参数
    // 2. 获取可枚举属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的所有属性值（包括不可枚举）
   * @param {Object} object - 目标对象
   * @returns {Array} - 属性值数组
   */
  static valuesAll(object) {
    // TODO: 实现获取所有值
    // 1. 获取所有属性值
    // 2. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持深度获取）
   * @param {Object} object - 目标对象
   * @param {number} depth - 最大深度
   * @returns {Array} - 属性值数组
   */
  static valuesDeep(object, depth = Infinity) {
    // TODO: 实现深度获取值
    // 1. 检查深度
    // 2. 限制深度
    // 3. 递归获取
    // 4. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持条件过滤）
   * @param {Object} object - 目标对象
   * @param {Function} predicate - 条件函数
   * @returns {Array} - 属性值数组
   */
  static valuesWithFilter(object, predicate) {
    // TODO: 实现条件过滤获取值
    // 1. 过滤属性值
    // 2. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持类型过滤）
   * @param {Object} object - 目标对象
   * @param {string} type - 属性值类型
   * @returns {Array} - 属性值数组
   */
  static valuesWithType(object, type) {
    // TODO: 实现类型过滤获取值
    // 1. 检查类型
    // 2. 过滤类型
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持正则过滤）
   * @param {Object} object - 目标对象
   * @param {RegExp} pattern - 正则表达式
   * @returns {Array} - 属性值数组
   */
  static valuesWithPattern(object, pattern) {
    // TODO: 实现正则过滤获取值
    // 1. 匹配模式
    // 2. 过滤属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持排序）
   * @param {Object} object - 目标对象
   * @param {Function} compareFn - 比较函数
   * @returns {Array} - 属性值数组
   */
  static valuesWithSort(object, compareFn) {
    // TODO: 实现排序获取值
    // 1. 获取属性值
    // 2. 排序属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持转换）
   * @param {Object} object - 目标对象
   * @param {Function} transformer - 转换函数
   * @returns {Array} - 属性值数组
   */
  static valuesWithTransform(object, transformer) {
    // TODO: 实现转换获取值
    // 1. 获取属性值
    // 2. 转换属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持验证）
   * @param {Object} object - 目标对象
   * @param {Object} schema - 验证模式
   * @returns {Array} - 属性值数组
   */
  static valuesWithValidation(object, schema) {
    // TODO: 实现验证获取值
    // 1. 验证属性值
    // 2. 过滤属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持异步处理）
   * @param {Object} object - 目标对象
   * @param {Function} processor - 异步处理函数
   * @returns {Promise<Array>} - 属性值数组
   */
  static async valuesAsync(object, processor) {
    // TODO: 实现异步获取值
    // 1. 异步处理
    // 2. 获取属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持并发处理）
   * @param {Object} object - 目标对象
   * @param {Function} processor - 处理函数
   * @param {number} concurrency - 并发数
   * @returns {Promise<Array>} - 属性值数组
   */
  static async valuesConcurrent(object, processor, concurrency = 3) {
    // TODO: 实现并发获取值
    // 1. 并发处理
    // 2. 获取属性值
    // 3. 返回属性值数组
  }

  /**
   * 获取对象的属性值（支持统计）
   * @param {Object} object - 目标对象
   * @returns {Object} - 属性值数组和统计信息
   */
  static valuesWithStats(object) {
    // TODO: 实现统计获取值
    // 1. 统计信息
    // 2. 获取属性值
    // 3. 返回属性值数组和统计
  }
}

module.exports = Values
